﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace cstdx.Proto.Std;

/// <summary>
/// 行情服务器数据包头部信息
/// </summary>
public class PacketHeader : IUnmarshaler
{
	private byte[] _raw;

	/// <summary>
	/// 未知字段1（32位无符号整数，小端序）
	/// </summary>
	public uint Unknown1 { get; set; }

	/// <summary>
	/// 未知字段2（32位无符号整数，小端序）
	/// </summary>
	public uint Unknown2 { get; set; }

	/// <summary>
	/// 未知字段3（32位无符号整数，小端序）
	/// </summary>
	public uint Unknown3 { get; set; }

	/// <summary>
	/// 压缩后的大小（16位无符号整数，小端序）
	/// </summary>
	public ushort ZipSize { get; set; }

	/// <summary>
	/// 解压后的大小（16位无符号整数，小端序）
	/// </summary>
	public ushort UnzipSize { get; set; }

	/// <summary>
	/// 获取原始字节数据
	/// </summary>
	/// <returns>原始字节数组</returns>
	public byte[] Bytes()
	{
		return _raw;
	}

	/// <summary>
	/// 判断数据是否经过压缩
	/// </summary>
	/// <returns>如果压缩则返回true，否则返回false</returns>
	public bool Compressed()
	{
		return ZipSize != UnzipSize;
	}

	/// <summary>
	/// 获取解压后的大小
	/// </summary>
	/// <returns>解压后的大小</returns>
	public int Size()
	{
		return UnzipSize;
	}

	/// <summary>
	/// 从字节数组反序列化头部信息
	/// </summary>
	/// <param name="data">原始字节数组</param>
	public void Unmarshal(byte[] data)
	{
		_raw = data;
		SerializationHelper.DefaultUnmarshal(data, this);
	}
}

